package point;

import java.util.Random;

/**题目：随机洗牌
 * 给定一个数组，要求对数组进行随机排序返回
 * @Author Gavin
 * @date 2022.01.03 11:21
 */
public class array_2 {
    /**
     * 解题思路：使用一个指针指向最后一个元素，
     * 然后在剩余的下标中随机选取一个下标，然后和指针指向的位置进行交换
     * 然后向前移动指针
     */
    private Random rnd=new Random();
    //交换数组中下标的值
    void swap(int[] nums,int i,int j){
        int tmp=nums[j];
        nums[j]=nums[i];
        nums[i]=tmp;
    }
    //Time:O(n) Space:O(1)
    public int[] solution(int[] nums){
        for (int i = nums.length-1; i>0 ;--i) {
            int j=rnd.nextInt(i+1);//这里是取0到i的随机数
            swap(nums,i,j);
        }
        return nums;
    }

    public static void main(String[] args) {
        Random rnd=new Random();
        for (int i = 0; i < 10; i++) {
            System.out.println(rnd.nextInt(11));
        }
    }
}
